#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include "stusql.h"
#include "dialog_stu.h"
#include "page_login.h"
#include "admsql.h"
#include "dialog_admin.h"

#include <QMainWindow>
#include <QTreeWidget>
#include <set>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow {
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    AdmInfo getCurrentAdmin() const;

private slots:
    void on_pb_exit_clicked();
    void on_pb_simulation_clicked();
    bool readNamesFromFile(QStringList &names, const QString &filePath);
    void on_pb_add_clicked();
    void on_pb_clear_clicked();
    void on_pb_del_clicked();
    void on_pb_update_clicked();
    void on_pb_search_clicked();
    void on_cb_select_checkStateChanged(const Qt::CheckState &arg1);
    void populateTable();
    void onTreeWidgetItemClicked(QTreeWidgetItem *item, int column);
    void updateAdminInfoLabels(const AdmInfo &adminInfo);
    void on_pb_password_clicked();
    void onAdminInfoChanged(const AdmInfo &adminInfo);

    // void on_pb_sid_clicked();

    // void on_pb_age_clicked();

    // void on_pb_grade_clicked();

    // void on_pb_class_clicked();

    // void on_pb_id_clicked();


    void onHeaderSectionClicked(int logicalIndex);

private:
    int currentSortedColumn = -1; // 当前排序列索引，默认值为-1表示没有列被选中
    Qt::SortOrder sortOrder = Qt::AscendingOrder; // 排序顺序，默认升序

    static const std::set<int> sortableColumns; // 可排序列集合

    void clearSortIcon(int logicalIndex);
    void setSortIcon(int logicalIndex, Qt::SortOrder order);
    void reloadTableData(const QString& sortColumnName, Qt::SortOrder sortOrder);
    void updateRowNumbers();
    // struct SortInfo {
    //     Qt::SortOrder sortOrder;
    //     QString ascendingImagePath;
    //     QString descendingImagePath;
    // };

    // QMap<QPushButton*, int> buttonToColumnMap; // 按钮到列索引的映射
    // QMap<QPushButton*, SortInfo> buttonToSortInfoMap; // 按钮到排序信息的映射
    // QPushButton* currentSortedButton = nullptr; // 当前被选中的按钮

    // void sortAndSwitchIcon(QPushButton* button);
    // void updateRowNumbers();
    // void reloadTableData(const QString& sortColumnName, Qt::SortOrder sortOrder);
    Ui::MainWindow *ui;
    stuSql *m_ptrStuSql;
    AdmSql *m_admSql;
    QStringList m_names;
    Dialog_AddStu m_dlgAddStu;
    void showStudentInformation();
    void showAdminInformation();
    Page_login m_dlgLogin;
    QWidget *page_student; // 学生管理页面
    QWidget *page_admin;  // 管理员页面
    QWidget *page_person;  // 个人中心页面
    Dialog_password* m_passwordDialog;
};

#endif // MAINWINDOW_H

